package common

import (
	"fmt"
	"github.com/matishsiao/goInfo"
	"math/rand"
	"net"
	"os"
	"strings"
	"time"
)

// Frn 函数返回一个小于n的随机整数
func Frn(n int) int {
	rand.Seed(time.Now().UnixNano())
	return rand.Intn(n)
}

// 返回主机名
func GetHostName() string {
	nodeName := os.Getenv("MY_NODE_NAME")
	if nodeName == "" {
		nodeName, _ = os.Hostname()
	}
	return nodeName
}

// 通过构造 网络连接 通过路由走到真正的出口 ，就能拿到真正的ip地址
func GetLocalIp() string {
	conn, err := net.Dial("udp", "8.8.8.8:53")
	if err != nil {
		fmt.Printf("get local addr err:%v\n", err)
		return ""
	} else {
		localIp := strings.Split(conn.LocalAddr().String(), ":")[0]
		conn.Close()
		return localIp
	}
}

// 获取系统信息
func GetNodeInfo() SysInfo {
	var si SysInfo
	si.GetSysInfo()
	gi, _ := goInfo.GetInfo()
	si.OsType = gi.Kernel
	return si
}

// 写文件
func WriteFileWithString(filePath, content string) error {
	return os.WriteFile(filePath, []byte(content), 0644)
}

// 读取文件
func ReadFile(path string) (string, error) {
	res, err := os.ReadFile(path)
	return string(res), err
}
